// 给定一个不含重复数字的数组 nums ，返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

//使用回溯函数 


function permute(nums: number[]): number[][] {
   let res:number[][] = []
   backtrack(nums,[])
   return res

   function backtrack(nums:number[],track:number[]){
      //递归结束的条件
      if(nums.length === track.length){
         res.push(track)
         return
      }

      for(let i = 0;i<nums.length;i++){
         if(track.includes(nums[i])) continue
         track.push(nums[i])
          // 这里我们拷贝一份，因为后续操作会修改原数组。
         let newtrack = [...track]
         backtrack(nums,newtrack)
          // 递归到该层时将元素还原。
         track.pop()
      }
   }
   
};

console.log(permute([1,2,3,4]))